← Writeups

Exploiting XXE using external entities to retrieve files

APPRENTICE LAB Not solved

This lab has a "Check stock" feature that parses XML input and returns any unexpected values in the response.

To solve the lab, inject an XML external entity to retrieve the contents of the /etc/passwd file.


https://siunam321.github.io/ctf/portswigger-labs/XXE-Injection/xxe-1/


<?xml version="1.0" encoding="UTF-8"?><stockCheck><productId>a</productId><storeId>1</storeId></stockCheck>
  • El root element del documento es root (!DOCTYPE root)

  • se define una entidad externa (variable) llamada "xxe" la cual uiliza la keyword SYSTEM pasa asi recuperar el rchivo /etc/passwd

  • lugeo se utiliza la var "xxe" en productId tag para poder listar el output

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck>
    <productId>&xxe;</productId>
    <storeId>1</storeId>
</stockCheck>


 

Claro, aquí tienes una explicación detallada de la sintaxis de esa porción de XML:

<!DOCTYPE root [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>

1. <!DOCTYPE root [

  • <!DOCTYPE: Indica el inicio de una declaración de tipo de documento (DTD, Document Type Definition) en XML.
  • root: Es el nombre del elemento raíz del documento XML al que se asocia esta DTD.
  • [: Abre la declaración interna de la DTD, lo que significa que las definiciones que siguen están contenidas dentro del propio documento XML (no en un archivo externo).

2. <!ENTITY xxe SYSTEM "file:///etc/passwd">

  • <!ENTITY: Define una entidad en XML. Las entidades son como variables o atajos que pueden ser referenciados en el documento.
  • xxe: Es el nombre de la entidad que se está definiendo.
  • SYSTEM: Indica que la entidad es externa y su valor se obtendrá de un recurso externo (en este caso, un archivo).
  • "file:///etc/passwd": Es la URI que apunta al recurso externo. Aquí, se está intentando acceder al archivo /etc/passwd del sistema de archivos, que en sistemas Unix/Linux contiene información sobre los usuarios del sistema.

3. ]>

  • Cierra la declaración interna de la DTD.

¿Qué hace este código?

Esta porción de XML está definiendo una entidad externa llamada xxe que, cuando es referenciada en el documento XML (por ejemplo, con &xxe;), intentará leer y mostrar el contenido del archivo /etc/passwd del servidor donde se procesa el XML.

Riesgo de seguridad: Ataque XXE

Este es un ejemplo clásico de un ataque XXE (XML External Entity). Si un sistema procesa XML sin desactivar la resolución de entidades externas, un atacante podría usar esto para leer archivos sensibles del servidor, realizar escaneo de puertos, o incluso ejecutar código malicioso, dependiendo de la configuración del parser XML.


¿Te gustaría saber cómo se referencia esta entidad en el XML o cómo protegerse contra ataques XXE?